package proyectoX.src.armas;

import java.awt.Point;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.entidades.Principal;
import proyectoX.src.municiones.MunicionEscudo;


/**
 * Arma utilizada por la nave exploradora para quedar invulnerable por 3 segundos.
 * Se puede activar cada 9 segundos. 
 */
public class Escudo extends arma {

	protected MunicionEscudo escudoActivo;
	protected boolean escudoActivadoActualmente;

	/**
	 * Crea el arma con el nivel pasado por parámetro.
	 * @param n Nivel actual.
	 */
	public Escudo(Nivel n) {
		super(2, 0, n, 9000);			//puedes activar el escudo de nuevo después de 6 segundos de la última vez
		escudoActivadoActualmente = false;
	}

	/**
	 * Obtiene la nueva posición donde debe posicionarse el escudo.
	 * @return Un arreglo de dos componentes enteras las cuales corresponden a n puto (x, y)
	 */
	public int[] obtenerNuevaPosicion() {
		//devuelve un arreglo de dos componentes donde la primera corresponde a X y la segunda a Y
		Principal p = nivel.obtenerNavePrincipal();
		int[] resultado = new int[2];

		int posX = (p.getX()+p.getWidth()/2)-escudoActivo.getWidth()/2;
		int posY = (p.getY()+p.getHeight()/2)-escudoActivo.getHeight()/2;


		resultado[0] = posX;
		resultado[1] = posY;

		return resultado;
	}


	/**
	 * Desactiva el escudo.
	 */
	public void desactivar() {
		escudoActivadoActualmente = false;
		nivel.quitarMunicion(escudoActivo);
		nivel.obtenerNavePrincipal().invulnerable(false);
	}

	
	/**
	 * Devuelve el estado de activación del escudo.
	 * @return Verdadero si el escudo está activado, falso en caso contrario.
	 */
	public boolean getEscudoActivadoActualmente() {
		return escudoActivadoActualmente;
	}

	
	/**
	 * Crea un escudo que se mantiene centrado en la nave jugadora.
	 */
	public void disparar(Point location) {
		if (pasoDelay() && !escudoActivadoActualmente) {
			tiempoUltimoDisparo = System.currentTimeMillis();
			Principal naveAux = nivel.obtenerNavePrincipal();
			escudoActivo = new MunicionEscudo(this,nivel);

			//posiciones correspondientes centradas sobre la nave
			int posX = (location.x+naveAux.getWidth()/2)-escudoActivo.getWidth()/2;
			int posY = (location.y+naveAux.getHeight()/2)-escudoActivo.getHeight()/2;

			escudoActivo.setLocation(posX, posY);
			escudoActivo.setVisible(true);		
			escudoActivadoActualmente = true;		
			nivel.agregarMunicion(escudoActivo);
			nivel.obtenerNavePrincipal().invulnerable(true);
		}
	}
}
